#include <bits/stdc++.h>
using namespace std;
int n,m,a2[400005],a[400005],q[400005],T,X[15],t[400005],w[400005],p,f[400005],lim[400005];
long long prf[400005];
void upd(int l,int r,int z){
    r=min(r,p);if(l<=r)prf[l]+=z,prf[r+1]-=z;
}
int lowbit(int x){
    if(x==0)return p*2;
    else return x&(-x);
}
void dfs(int x,int d){
    if(x>=p){
        t[x]=(p*2-x<=n?p*2-x:p+1);
        w[x]=a[p*2-x];
    // cout<<x<<' '<<d<<":"<<t[x]<<' '<<w[x]<<endl;
        return ;
    }
    int ls=x*2+1,rs=x*2;
    dfs(ls,d-1);dfs(rs,d-1);
    if(f[x]==1)swap(ls,rs);
    if(t[ls]==p+1){
        t[x]=p+1;w[x]=0;
    }
    else if(w[ls]>=d){
        t[x]=t[ls];w[x]=w[ls];
    }
    else{
        t[x]=max(t[rs],t[ls]);w[x]=w[rs];
    }
    // cout<<x<<' '<<d<<":"<<t[x]<<' '<<w[x]<<' '<<f[x]<<endl;
}
void dfs2(int x,int d,int mi){
    if(x>=p){
        int u=p*2-x;
        int L=lim[u]/2+1,R=lim[u];
        // cout<<x<<":"<<u<<' '<<max(L,1)<<' '<<min(mi,u-1)<<endl;
        upd(max(L,1),min(mi,u-1),u);
        return ;
    }
    int ls=x*2+1,rs=x*2;
    dfs2(ls,d-1,mi);
    if(f[x]==1)dfs2(rs,d-1,mi);
    else{
        if(w[ls]<d)dfs2(rs,d-1,mi);
        else dfs2(rs,d-1,min(mi,t[ls]-1));
    }
}
void dfs3(int x,int d,int mi,int mx){
    if(x>=p){
        int u=p*2-x;
        int R=mi;
        if(a[u]<=20)
            R=min(R,lowbit(mx-(mx&((1<<(a[u]+1))-1)))/2);
        
        // cout<<x<<":"<<u<<' '<<R<<' '<<lowbit(mx-(mx&((1<<(a[u]+1))-1)))/2<<' '<<mx<<endl;
        upd(u,R,u);
        // if(a[u]<mx)return ;
        // if(u<=mi-1)upd(u,mi-1,1);
        return ;
    }
    int ls=x*2+1,rs=x*2;
    if(f[x]==1)swap(ls,rs);
    dfs3(ls,d-1,mi,mx|(1<<d));
    if(w[ls]<d)dfs3(rs,d-1,mi,mx);
    else dfs3(rs,d-1,min(mi,t[ls]-1),mx);
}
int main(){
    freopen("arena.in","r",stdin);
    freopen("arena.out","w",stdout);
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    cin>>n>>m;
    for(int i=1;i<=n;i++)cin>>a2[i];
    for(int i=1;i<=m;i++)cin>>q[i];
    p=1;int d=0;
    while(p<n)p*=2,d++;
    for(int i=p-1;i>=1;i--){
        char ch;
        cin>>ch;
        f[i]=ch-'0';
    }
    int tmp=1;
    for(int i=1;i<=p;i++){
        while(tmp<i)tmp*=2;
        lim[i]=tmp;
    }
    // cout<<p<<endl;
    cin>>T;
    while(T--){
        cin>>X[0]>>X[1]>>X[2]>>X[3];
        for(int i=0;i<=p;i++)prf[i]=0;
        for(int i=1;i<=n;i++)a[i]=(a2[i]^X[(i%4)]);
        dfs(1,d);
        dfs2(1,d,p+1);
        dfs3(1,d,p+1,0);
        for(int i=1;i<=p;i++)prf[i]+=prf[i-1];
        long long ans=0;
        for(int i=1;i<=m;i++)ans^=(1ll*i*prf[q[i]]);
        // for(int i=1;i<=m;i++)cout<<prf[i]<<' ';
        // cout<<endl;
        cout<<ans<<endl;
        // exit(0);
    }
    return 0;
}